اگر جلد اول این کتاب را با دقت مطالعه کرده باشید، اکنون با مفاهیم بنیادین برنامهنویسی موازی و ناهمگام در داتنت آشنا هستید. میدانید چگونه با Task و async/await کدهای ناهمگام بنویسید، چگونه با Parallel.For و Parallel.ForEach حلقههای سنگین را بین هستههای پردازنده تقسیم کنید، و چگونه با PLINQ پرسوجوهای موازی بر روی مجموعه دادهها بنویسید. شما پایهی محکمی برای ورود به دنیای پیشرفتهی برنامهنویسی موازی دارید.
پیشگفتار / ۱۱
**فصل پنجم: مجموعههای همروند (Concurrent Collections)** / ۱۷
اهداف فصل / ۱۹
۵-۱ مقدمه: چرا به مجموعههای همروند نیاز داریم؟ / ۱۹
۵-۱-۱ مشکلات روش قدیمی (استفاده از قفل) / ۲۰
۵-۱-۲ معرفی مجموعههای همروند (Concurrent Collections) / ۲۰
۵-۱-۳ مجموعههای همروند همیشه سریعتر نیستند / ۲۱
۵-۲ فضای نام و مجموعههای اصلی / ۲۲
۵-۲-۱ جدول مجموعههای همروند اصلی / ۲۲
۵-۲-۲ واسط IProducerConsumerCollection / ۲۳
۵-۲-۳ الگوی تولیدکننده-مصرفکننده (Producer-Consumer) / ۲۳
۵-۲-۴ مثال استفاده از ConcurrentQueue در الگوی تولیدکننده-مصرفکننده / ۲۵
۵-۳ همگامسازی سطح پایین: SpinLock و SpinWait / ۲۶
۵-۳-۱ ساختار قفل چرخان (SpinLock) / ۲۶
۵-۳-۲ ساختار چرخش هوشمند (SpinWait) / ۲۹
۵-۳-۳ مدل همگامسازی دومرحلهای (Two-Phase Locking) / ۳۰
۵-۴ پشته همروند (ConcurrentStack) با ساختار LIFO / ۳۱
۵-۴-۱ عملیات اصلی در پشته همروند (ConcurrentStack) / ۳۱
۵-۴-۲ مثال ردیابی زمان ورود و خروج متدها با پشته همروند / ۳۲
۵-۵ صف همروند (ConcurrentQueue) با ساختار FIFO / ۳۴
۵-۵-۱ عملیات اصلی در صف همروند (ConcurrentQueue) / ۳۴
۵-۵-۲ مثال شبیهسازی سفارشات در یک فروشگاه اینترنتی / ۳۵
۵-۶ کیسه همروند نامرتب (ConcurrentBag) / ۳۷
۵-۶-۱ ساختار داخلی و مکانیزم دزدی کار (Work-Stealing) / ۳۸
۵-۶-۲ عملیات اصلی در کیسه همروند (ConcurrentBag) / ۳۸
۵-۶-۳ مثال شبیهسازی ورود و خروج مشتریان در یک فروشگاه / ۳۹
۵-۶-۴ چه زمانی از ConcurrentBag استفاده کنیم؟ / ۴۰
۵-۷ دیکشنری همروند (ConcurrentDictionary) / ۴۱
۵-۷-۱ مهمترین متدهای ConcurrentDictionary / ۴۱
۵-۷-۲ مثال شمارش دفعات تکرار اعداد بهصورت موازی / ۴۲
۵-۷-۳ نکات مهم عملکردی / ۴۳
۵-۸ مجموعه بلاکشونده (BlockingCollection) / ۴۴
۵-۸-۱ تفاوت BlockingCollection با سایر مجموعههای همروند / ۴۶
۵-۸-۲ عملیات اصلی BlockingCollection / ۴۶
۵-۸-۳ تعیین ظرفیت محدود (Bounded Collection) / ۴۷
۵-۸-۴ مثال تولیدکننده-مصرفکننده با بلاک (کد کامل) / ۴۷
۵-۸-۵ نکات مهم و مقایسه با Channel / ۴۸
۵-۹ جایگزین مدرن: Channel (اختیاری) / ۴۸
۵-۹-۱ انواع کانال و نحوه ایجاد آنها / ۴۹
۵-۹-۲ عملیات اصلی روی کانال / ۴۹
۵-۹-۳ مثال استفاده از Channel با تولیدکننده و مصرفکننده ناهمگام / ۵۰
۵-۹-۴ مزایای Channel نسبت به BlockingCollection / ۵۱
۵-۱۰ خلاصه و نکات کلیدی / ۵۲
تمرینهای فصل پنجم / ۵۴
**فصل ششم: سفارشیسازی (Customization) در TPL** / ۵۵
اهداف فصل / ۵۷
۶-۱ مقدمه: چه زمانی به سفارشیسازی نیاز داریم؟ / ۵۷
۶-۲ مجموعههای تولیدکننده-مصرفکننده سفارشی / ۵۸
۶-۲-۱ پیادهسازی یک مجموعه تجمیعکننده (AggregatingConcurrentBag) / ۵۹
۶-۲-۲ ملاحظات و نکات مهم / ۶۱
۶-۲-۳ زمان استفاده از مجموعههای سفارشی / ۶۲
۶-۳ تقسیمکنندههای سفارشی (Custom Partitioners) / ۶۲
۶-۳-۱ استفاده از متد Partitioner.Create برای قطعهبندی ساده / ۶۲
۶-۳-۲ پیادهسازی تقسیمکننده سفارشی (Custom Partitioner) / ۶۴
۶-۳-۳ نکات مهم در طراحی تقسیمکننده سفارشی / ۶۷
۶-۴ زمانبندهای سفارشی (Custom Task Schedulers) / ۶۷
۶-۴-۱ مثال زمانبند با حداکثر همزمانی محدود / ۶۸
۶-۴-۲ زمانبند زمینه همگامسازی برای محیطهای UI / ۷۰
۶-۵ جمعبندی و توصیهها / ۷۲
تمرینهای فصل ششم / ۷۳
**فصل هفتم: الگوهای ناهمگام مدرن و async/await پیشرفته** / ۷۵
اهداف فصل / ۷۷
۷-۱ مقدمه: چرا به الگوهای پیشرفته ناهمگام نیاز داریم؟ / ۷۷
۷-۲ مقایسه Task و ValueTask جهت کاهش تخصیص حافظه / ۷۸
۷-۲-۱ چه زمانی از ساختار ValueTask استفاده کنیم؟ / ۷۹
۷-۲-۲ محدودیتهای کلیدی در استفاده از ValueTask / ۸۱
۷-۳ پردازش جریانی داده با IAsyncEnumerable و ساختار await foreach / ۸۱
۷-۳-۱ مثال تولید جریانی اعداد تصادفی با تأخیر / ۸۲
۷-۳-۲ مثال خواندن خطوط یک فایل بزرگ بهصورت ناهمگام / ۸۳
۷-۳-۳ نکات مهم در استفاده از IAsyncEnumerable / ۸۴
۷-۴ نحوه صحیح استفاده از متد ConfigureAwait(false) در کتابخانهها / ۸۵
۷-۴-۱ مشکل بنبست در برنامههای UI بدون استفاده از ConfigureAwait / ۸۶
۷-۴-۲ راهحل: پیادهسازی ConfigureAwait(false) در کتابخانهها / ۸۷
۷-۴-۳ قانون طلایی برای توسعهدهندگان کتابخانه و برنامههای UI / ۸۸
۷-۵ تبدیل رویدادهای قدیمی به Task با TaskCompletionSource / ۸۹
۷-۵-۱ مثال تبدیل رویداد DownloadStringCompleted به یک Task / ۸۹
۷-۵-۲ مثال تبدیل FileSystemWatcher به Task جهت انتظار فایل جدید / ۹۱
۷-۵-۳ نکات کلیدی درباره کار با TaskCompletionSource / ۹۱
۷-۶ سناریوهای واقعی کار با Task.WhenAll و Task.WhenAny / ۹۲
۷-۶-۱ فراخوانی همزمان چند وبسرویس با WhenAll / ۹۲
۷-۶-۲ پردازش سریعترین پاسخ دریافتی با WhenAny / ۹۳
۷-۶-۳ پیادهسازی مهلت زمانی (Timeout) با WhenAny و Task.Delay / ۹۵
۷-۷ مدیریت منابع و لغو عملیات با CancellationToken و Timeout / ۹۷
۷-۷-۱ لغو ایمن عملیات با استفاده از CancellationToken / ۹۷
۷-۷-۲ ایجاد توکن لغو با زمان خاتمه خودکار / ۹۸
۷-۷-۳ ترکیب چند توکن لغو با متد CreateLinkedTokenSource / ۹۹
۷-۸ جمعبندی و نکات کلیدی / ۱۰۰
تمرینهای فصل هفتم / ۱۰۲
**فصل هشتم: ارتباط کارآمد بین Taskها با Channel** / ۱۰۳
اهداف فصل / ۱۰۵
۸-۱ مقدمه: چرا به Channel نیاز داریم؟ / ۱۰۵
۸-۲ مقایسه جامع BlockingCollection و Channel / ۱۰۷
۸-۲-۱ مقایسه از نظر پشتیبانی بومی از async/await / ۱۰۸
۸-۲-۲ کنترل فشار برگشتی (Backpressure) و مدیریت ظرفیت / ۱۰۹
۸-۲-۳ بررسی کارایی و کارآمدی در رقابت پردازشی بالا / ۱۱۰
۸-۲-۴ انعطافپذیری در قابلیت لغو عملیات (Cancellation) / ۱۱۰
۸-۲-۵ جمعبندی نهایی مقایسه / ۱۱۱
۸-۳ انواع کانال: کانال نامحدود و کانال محدود / ۱۱۲
۸-۳-۱ بررسی ساختار کانال نامحدود (Unbounded Channel) / ۱۱۳
۸-۳-۲ بررسی ساختار کانال محدود (Bounded Channel) / ۱۱۳
۸-۴ سناریوی تولیدکننده-مصرفکننده با Channel و ناهمگامسازی / ۱۱۶
۸-۵ پیادهسازی سفارشی کانال با اولویتبندی (Priority Channel) / ۱۱۸
۸-۵-۱ پیادهسازی کانال اولویتدار بر پایه کلاس PriorityQueue / ۱۱۹
۸-۵-۲ نکات مهم در طراحی و راهکارهای جایگزین / ۱۲۱
۸-۶ کاربرد Channel در سرویسهای پسزمینه ASP.NET Core / ۱۲۲
۸-۶-۱ مراحل گامبهگام پیادهسازی در قالب BackgroundService / ۱۲۲
۸-۶-۲ مزایای فنی و نکات کلیدی عملکردی / ۱۲۵
۸-۷ جمعبندی و نکات کلیدی / ۱۲۶
تمرینهای فصل هشتم / ۱۲۸
**فصل نهم: پیوست – پروژههای عملی جامع** / ۱۳۱
۹-۱ مقدمه / ۱۳۳
۹-۲ پروژه فصل دوم: مسابقه جستجوی کلمه در فایلهای حجیم (Task ناهمگام) / ۱۳۴
۹-۲-۱ هدف پروژه و ارتباط با مباحث فصل دوم / ۱۳۴
۹-۲-۲ کدهای کامل پروژه / ۱۳۴
۹-۲-۳ تحلیل و شرح خطبهخط کدها / ۱۳۸
۹-۳ پروژه فصل سوم: تحلیل موازی گزارش فروش (موازیسازی داده) / ۱۴۰
۹-۳-۱ هدف پروژه و ارتباط با مباحث فصل سوم / ۱۴۰
۹-۳-۲ کدهای کامل پروژه / ۱۴۱
۹-۳-۳ تحلیل و شرح خطبهخط کدها / ۱۴۵
۹-۴ پروژه فصل چهارم: تحلیل گزارش فروش با PLINQ و الگوی MapReduce / ۱۴۷
۹-۴-۱ هدف پروژه و ارتباط با مباحث فصل چهارم / ۱۴۷
۹-۴-۲ کدهای کامل پروژه / ۱۴۸
۹-۴-۳ تحلیل و شرح خطبهخط کدها / ۱۵۱
۹-۵ پروژه فصل پنجم: شبیهسازی سیستم پردازش سفارشات (مجموعههای همروند) / ۱۵۴
۹-۵-۱ هدف پروژه و ارتباط با مباحث فصل پنجم / ۱۵۴
۹-۵-۲ کدهای کامل پروژه / ۱۵۵
۹-۵-۳ تحلیل و شرح خطبهخط کدها / ۱۵۹
۹-۶ پروژه فصل ششم: شبیهسازی مأموریتهای محاسباتی با زمانبند سفارشی در TPL / ۱۶۱
۹-۶-۱ هدف پروژه و ارتباط با مباحث فصل ششم / ۱۶۱
۹-۶-۲ کدهای کامل پروژه / ۱۶۲
۹-۶-۳ تحلیل و شرح خطبهخط کدها / ۱۶۶
۹-۷ پروژه فصل هفتم: پردازشگر ابری تصاویر با کش ناهمگام و جریانی / ۱۶۸
۹-۷-۱ هدف پروژه و ارتباط با مباحث فصل هفتم / ۱۶۸
۹-۷-۲ کدهای کامل پروژه / ۱۶۹
۹-۷-۳ تحلیل و شرح خطبهخط کدها / ۱۷۲
۹-۸ پروژه فصل هشتم: سیستم پردازش صف اولویتدار در پسزمینه با Channel / ۱۷۵
۹-۸-۱ هدف پروژه و ارتباط با مباحث فصل هشتم / ۱۷۵
۹-۸-۲ کدهای کامل پروژه / ۱۷۶
۹-۸-۳ تحلیل و شرح خطبهخط کدها / ۱۷۹
سخن پایانی / ۱۸۳
منابع و مراجع به تفکیک فصل / ۱۸۵
| دسته بندی موضوعی | موضوع فرعی |
| فنی و مهندسی |
مهندسی كامپيوتر
|